--任务格式模本

--XXXX表示任务ID,如11001
RoleTaskInfoXXXX = 
{
	--name为任务名称,tasktype任务类型(一般都添1),minLevel为可接该任务的最低等级,maxLevel为最高等级,preTask为前置任务ID,必须完成前置任务才能做本任务
	name = "OOOO",tasktype = 1,minLevel = 0, maxLevel = 0,preTask = 0,
	elem = 
	{
		--id为子任务ID,name子任务名称,desc任务描述,begNpc接此任务的NpcID,endNpc完成任务的NpcID
		{id = 1,	name = "OOOO",	desc = TASK_DESC_XXXX_1,begMap=1,begNpc = 0 ,endMap=1,endNpc = 0, midNpcs={}},
	},
	content = 
	{
		--id子任务ID,state为任务完成需要的状态值,operate为当前任务的状态值,tips为简单的任务描述,
		--item为接受任务时自动添加的道具,格式{{道具ID,0(添加到自己包裹,如果是1则掉到场景中),道具数量,物品属性字符串(例子中的为品质2绑定的道具)},{物品2格式同前一个},},任务中途道具丢失可以继续领取
		{id = 1,	state = 1,	operate = 1,	tips = "OOOO", item = {{7044,0,1,"quality=2 bind=1"}}},
		{id = 2,	state = 10,	operate = 0,	tips = "杀10个怪"},
	},
	rewards = 
	{
		-- 在 FinishRoleTask 中自动处理
		--id子任务ID,exp为奖励经验,item为奖励道具格式同上
		{id = 1,	exp = 1	,item = {{7044,0,1,"quality=2 bind=1"}}},
		{id = 2,	exp = 10,item = {{55000,0,5}}},
	},
	menu =	--主线任务菜单表
	{
		--id为子任务ID,accept为接受任务时显示的内容,finish为显示完成任务时显示的内容,prompt为任务进行中显示的内容,如果有特殊处理,可以在相应的位置改为下例所示{子任务id,第几步},然后在ShowTaskMenu函数中自己处理相应的内容
		-- accept: 在函数 AcceptRoleTaskMenuDealer 中解析，如果是一个表的话，调用ShowTaskMenuXXX(P1,P2) 表里面最多有2个参数
		{id = 1,	accept = TALK_XXXX_1_1 ,	finish = TALK_XXXX_1_2,		prompt = TALK_XXXX_1_3,
		--0,其他的不需要处理，提交时程序已经给处理好，会弹出打造装备界面回收道具并且增加operate
		--同样定义 TALK_XXXX_2_2, 这里之所以使用 finish={2,1} 是因为这里需要复杂的对话过程
		{id = 2,	accept = TALK_XXXX_2_1 ,	finish = {2,1},				prompt = TALK_XXXX_2_3},
	},
	elemEx =
	{
		-- 接任务时，在 DealAcceptTask 中进行处理
		-- 在 FinishRoleTask 中自动处理
		--任务元素的特殊信息,个性化信息在此处理
		--etype值的含义(1,ETASK_TYPE_NORMAL,普通任务，对话，打怪; 2,ETASK_TYPE_GUARD 运镖任务; 3,ETASK_TYPE_QA 答题任务; 4,ETASK_TYPE_SELECTWARD 可选奖励；)
		{id =1, etype=1, }, --normal
		{id =2, etype=2, guardnpc=xxx,	targetnpc=xxx}, --guard,targetnpc用于交副时不是endnpc,需要单独commit 参见 CommitGuardNpc
		{id =3, etype=3, qa="xxx"}, --答题(如果纯粹是答题，最好领state=operate=1)
		{id =4, etype=4, selectitem={{id,0,num,""},{}}}, --可选奖励
	}
}

--menu表内菜单如果声明成{2,1}表，则会回调ShowTaskMenuXXXX(2,1)
--负责生成所有与该任务相关的菜单
function ShowTaskMenuXXXX(etaskid,step)
	local fun = FormatFunctionString("","DealTaskMenuXXXX",etaskid,step)
	if etaskid == 2 and step == 1 then
		local info =
		{
			talk = "    你知道你要穿越到什么年代去吗?",
			button = { {"1937年(6)",fun}, {"1855年(6)",fun}, {"1776年(6)",fun}, },
		}
		ShowNpcMenuByTable(info)
	end
end

--ShowTaskMenuXXXX的回调处理
function DealTaskMenuXXXX(etaskid,step)
	local index = c_getVar(313,1)
	local choose = c_getVar(313,2)
	if etaskid == 2 and step == 1 then
	end
end

--接任务成功后的回调，保证接一次任务只回调一次
-- AddRoleTask(添加任务，子任务的统一处理函数) 函数最后回调 该函数，接任务成功之后，脚本需要继续处理那些内容
-- 例如接受该任务后，会不会触发其他的操作,例如给玩家播放一个特效画面等等
function OnAcceptTaskXXXX(etaskid)
	if etaskid == 1 then
	end
end

--执行函数 FinishRoleTask 时，调用该函数，检查任务是否可以完成
-- 包含3部分，
-- 1是,没有完成任务，显示提示界面 CheckFinishTaskXXXX(etaskid)
-- FinishRoleTaskMenuDealer 这里调用
-- 2是,否显示完成界面，包括未完成任务时，完成任务需要哪些提示
-- 3是,否能完成任务
--点击完成任务的回调，如果返回VALUE_FAIL则直接返回，任务不能完成
--这个函数会在多个地方被调用，具体哪里调用可以通过参数step区分
--完成任务回调函数时的地方
--CFT_SHOW_MENU = 1 
--CFT_FINISH_TASK = 2 
function CheckFinishTaskXXXX(etaskid,step)
--当需要判断是否显示完成界面时用CFT_SHOW_MENU
	if etaskid == 1 and step == CFT_SHOW_MENU then
--当点击完成任务需要判断是否能完成任务时用CFT_FINISH_TASK
	if etaskid == 1 and step == CFT_FINISH_TASK then
	end
	return VALUE_OK
end

--交任务成功后的回调，保证交一次任务只回调一次
-- 交任务成功，需要触发哪些事件，例如，给玩家弹出特殊提示,扣除任务道具等等
function OnFinishTaskXXXX(etaskid)
	if etaskid == 1 then
	end
end

--当有杀怪任务时,需要下面函数,前面的npcid表示怪物npc的id,后面taskid是本任务id,etask为本任务杀怪子任务的id
RegisterNpcDeadEvent(npcid,"AddRoleTaskOperate(taskid,etaskid)")

--休闲游戏的注册，用于游戏结束回调
--对对碰
RegisterEndGameEvent(taskid,"func(result)")

--注册用户升级事件
RegisterUserLevelupEvent(level,"AddRoleTask(xxx,xx)")

--注册使用道具事件
RegisterUseItemEvent(itemid,"DefaultProcessItem(11101,4,1,465,52,5,54458)")

------------------------------------------------------------------------------------
--注意：最好在任务中都是靠state,operate来约束任务是否可以交付，这样很多地方便于统一
--1.CheckFinishTask用时，最好state=1,operate=0,在Check中满足条件++operate即可
